package com.powerbank.user.service;

import com.powerbank.user.dto.ScanRentalDTO;
import com.powerbank.user.dto.ScanReturnDTO;
import com.powerbank.user.vo.RentalOrderVO;
import com.powerbank.user.vo.BillingInfoVO;

/**
 * 租借服务接口
 */
public interface RentalService {

    /**
     * 扫码租借充电宝
     *
     * @param userId    用户ID
     * @param rentalDTO 租借信息
     * @return 租借订单信息
     */
    RentalOrderVO scanRental(Long userId, ScanRentalDTO rentalDTO);

    /**
     * 获取用户当前租借订单
     *
     * @param userId 用户ID
     * @return 租借订单信息
     */
    RentalOrderVO getCurrentRentalOrder(Long userId);

    /**
     * 确认支付押金
     *
     * @param userId  用户ID
     * @param orderId 订单ID
     * @return 支付结果
     */
    RentalOrderVO confirmPayment(Long userId, Long orderId);

    /**
     * 取消租借订单
     *
     * @param userId  用户ID
     * @param orderId 订单ID
     * @return 是否成功
     */
    boolean cancelRental(Long userId, Long orderId);

    /**
     * 扫码归还充电宝
     *
     * @param userId    用户ID
     * @param returnDTO 归还信息
     * @return 归还结果
     */
    RentalOrderVO scanReturn(Long userId, ScanReturnDTO returnDTO);

    /**
     * 确认归还和费用结算
     *
     * @param userId  用户ID
     * @param orderId 订单ID
     * @return 最终账单信息
     */
    RentalOrderVO confirmReturn(Long userId, Long orderId);

    /**
     * 获取归还费用预览
     *
     * @param userId  用户ID
     * @param orderId 订单ID
     * @return 费用预览信息
     */
    BillingInfoVO getReturnBillingPreview(Long userId, Long orderId);

    /**
     * 上报设备故障
     *
     * @param userId            用户ID
     * @param deviceCode        设备编码
     * @param faultType         故障类型
     * @param faultDescription  故障描述
     * @return 是否成功
     */
    boolean reportDeviceFault(Long userId, String deviceCode, String faultType, String faultDescription);
}